昨天簡單介紹了如何利用 net/http
加上 html/template
這兩個 package 建立一個簡單的網站,但是在開發一個網站不是只有這麼簡單的事情,還需要考慮許多不同的情境,,例如 middleware、response 的格式、request 資料驗證 等等,這時候 framework
就是我們的好朋友拉,今天就來介紹 gin
這套好用的框架!
使用 golang 所開發出來的 web framework 有很多中,為什麼我偏偏要挑選 gin
呢?
原因很簡單,就讓我們先看幾個比較資料
圖片來源:https://hackernoon.com/the-myth-about-golang-frameworks-and-external-libraries-93cb4b7da50f
圖片來源:http://qwding.github.io/post/golang_framwork_pk/
圖片來源:https://www.mindinventory.com/blog/top-web-frameworks-for-development-golang/
從以上幾個分析資料得出讓我使用 gin 的原因如下
Star
數目前最高,就是大家都公認好用的echo
一點點,記憶體的表現是全部裡面最好的一個大家公認好用
、Response 回應速度最快
與效能表現上最好的框架不用嗎?
接下來就開始進入 gin
的世界吧
Gin 是一套使用 golang
打造的 web 框架,官方自己的介紹如下
Gin is a web framework written in Golang.
It features a martini-like API with much better performance, up to 40 times faster.
If you need performance and good productivity, you will love Gin.
為甚麼說是 martini-like API
呢? 原因是為 martini
也是一款使用 golang
寫的 web framework,gin 就是基於他的設計原理打造,但是效能比 martini
還要強大框架,關於 martini
的簡介在這裡
[備註] 由於 martini
目前已經沒有繼續維護了
gin
主要的特點如下
net/http
package 進行封裝httprouter
連結在此
middleware
機制gin.Context
data binding
機制看完以上特性之後是不是很心動呢?
就讓我們開始使用吧!
golang 在使用外來的 package 時就使用 go get
的指令就可以輕鬆的 package 下載下來並且安裝
讓我們使用以下的 command 將 gin
安裝到自己的 package
當中
go get github.com/gin-gonic/gin
一開始要使用 gin 不外乎與 net/http package 一樣需要進行 import,因此我們就先將這兩個 package 進行 import
import (
"github.com/gin-gonic/gin"
"net/http"
)
如同簡介中所提到的, gin 在處理 request 與 response 都用一個萬用的 gin.Context
就可以拉,就讓我們延續昨天的範例,回傳一個 HTML
func test(c *gin.Context) {
data := new(IndexData)
data.Title = "首頁"
data.Content = "我的第一支 gin 專案"
c.HTML(http.StatusOK, "index.html", data)
}
[備註] IndexData 為昨天範例中所實作的 struct,有興趣的同學可以看昨天的文章~
從以上範例可以看出,gin.Context
可以直接輸出 HTML
,裡面的參數依序是
當然他也可以支援許多不同的形態·如
幾乎目前主流的型態都支援到了,這讓我們在開發的時候可以省去許多處理回傳型態的時間,只要專注的開發功能即可。
首先,我們要在 main
方法中建立 gin 的 instance,我們可以把這個 instance 想像成是 server 的實例
server := gin.Default()
設定好實例之後,我們來設定讀取 HTML Template
,因為上一部的範例是要輸出 html,因此在這邊要先跟 gin 註冊好 template 的位置,好讓他去找
[備註]我們將 index.html 放在 template
的目錄底下
server.LoadHTMLGlob("template/*")
接著,就來設定 routing 了,gin 原生提供了封裝各種 http method 的 routing,本範例用到了 HTTP GET
方法,程式如下
server.GET("/", test)
從上方的程式可以看出,只要讓 gin 的 instance 執行 GET
方法,依序輸入 routing 與相對應的 request handler 後,就可以進行綁定,真的是相當的方便。
gin 所提供的 http method 如下
gin 幫我們把會用到 http method 都封裝好,這邊也只要呼叫要用到的方法即可,真的是太讚拉!
gin 也提供的簡潔的啟動方法,只需要單純的把 gin 的 instance 進行 Run()
方法即可,相關程式如下
server.Run(":8888")
將以上的程式結合起來如下
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type IndexData struct {
Title string
Content string
}
func test(c *gin.Context) {
data := new(IndexData)
data.Title = "首頁"
data.Content = "我的第一個首頁"
c.HTML(http.StatusOK, "index.html", data)
}
func main() {
server := gin.Default()
server.LoadHTMLGlob("template/*")
server.GET("/", test)
server.Run(":8888")
}
透過 go run main.go
的方法啟動後看到以下畫面就代表成功拉
通過導入 gin
這個 web framework 來協助我們開發 web application,可以大大的加快我們開發的速度,如果對於 gin
想要更深入了解的人可以參考 官方文件。
明天就讓我們來更進階的利用 gin
來實作其他的 HTTP METHOD 吧!